<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="../css/style.css" type="text/css" media="screen">
</head>
<body>
    <div class="entry"> 
 <p>从自定义指标中不能调用OrderSend()、OrderClose()、OrderCloseBy()、OrderDelete()和OrderModify()交易函数。</p> 
 <p>本组交易函数应用于智能交易和脚本中。只有智能交易设置中的“允许实时交易”属性被选中，才能调用交易函数。</p> 
 <p>为了在智能交易和脚本中进行交易，在程序交易环境(智能交易和脚本的自动交易的环境)中，只能为它提供一个线程。这就是为什么，如果这个交易环境被一个智能交易操作占用，因此会出现146错误(ERR_TRADE_CONTEXT_BUSY)，其他智能交易或脚本在此时就不能调用成功。为了能确定是否有交易在进行，可使用 IsTradeAllowed() 函数检测。为了清除交易环境下访问共享，我们能够使用个基于全局变量的交易信号，其值可以使用 GlobalVariableSetOnCondition() 函数改变。</p> 
 <p><a href="414.html">MQL4交易函数常见错误代码及处理意见</a></p> 
 <ul> 
  <li><strong><a href="#OrderSelect">OrderSelect()</a></strong> – 选择订单 </li> 
  <li><strong><a href="#OrderClose">OrderClose()</a></strong> – 平仓 </li> 
  <li><strong><a href="#OrderCloseBy">OrderCloseBy()</a></strong> – 相反头寸平仓 </li> 
  <li><strong><a href="#OrderClosePrice">OrderClosePrice()</a></strong> – 获取订单平仓价格 </li> 
  <li><strong><a href="#OrderCloseTime">OrderCloseTime()</a></strong> – 获取订单平仓时间 </li> 
  <li><strong><a href="#OrderComment">OrderComment()</a></strong> – 获取订单注释 </li> 
  <li><strong><a href="#OrderCommission">OrderCommission()</a></strong> – 获取订单佣金数额 </li> 
  <li><strong><a href="#OrderDelete">OrderDelete()</a></strong> – 删除挂单 </li> 
  <li><strong><a href="#OrderExpiration">OrderExpiration()</a></strong> – 获取挂单有效时间 </li> 
  <li><strong><a href="#OrderLots">OrderLots()</a></strong> – 获取订单交易手数 </li> 
  <li><strong><a href="#OrderMagicNumber">OrderMagicNumber()</a></strong> – 获取订单魔术编号 </li> 
  <li><strong><a href="#OrderModify">OrderModify()</a></strong> – 修改订单 </li> 
  <li><strong><a href="413.html#OrderOpenPrice">OrderOpenPrice()</a></strong> – 获取订单开仓价格 </li> 
  <li><strong><a href="413.html#OrderOpenTime">OrderOpenTime()</a></strong> – 获取订单开仓时间 </li> 
  <li><strong><a href="413.html#OrderPrint">OrderPrint()</a></strong> – 打印订单信息 </li> 
  <li><strong><a href="413.html#OrderProfit">OrderProfit()</a></strong> – 获取订单盈利金额 </li> 
  <li><strong><a href="413.html#OrderSend">OrderSend()</a></strong> – 发出订单 </li> 
  <li><strong><a href="413.html#OrdersHistoryTotal">OrdersHistoryTotal()</a></strong> – 获取历史订单总数 </li> 
  <li><strong><a href="413.html#OrderStopLoss">OrderStopLoss()</a></strong> – 获取订单止损值 </li> 
  <li><strong><a href="413.html#OrdersTotal">OrdersTotal()</a></strong> – 获取订单总数 </li> 
  <li><strong><a href="413.html#OrderSwap">OrderSwap()</a></strong> – 获取订单掉期值 </li> 
  <li><strong><a href="413.html#OrderSymbol">OrderSymbol()</a></strong> – 获取订单交易品种 </li> 
  <li><strong><a href="413.html#OrderTakeProfit">OrderTakeProfit()</a></strong> – 获取订单止盈值 </li> 
  <li><strong><a href="413.html#OrderTicket">OrderTicket()</a></strong> – 获取订单的订单编号 </li> 
  <li><strong><a href="413.html#OrderType">OrderType()</a></strong> – 获取订单交易类型 </li> 
 </ul> 
 <p>&nbsp;</p> 
 <h2><a name="OrderSelect"></a>OrderSelect() – 选择订单</h2> 
 <pre class="brush: mql4; toolbar: false;">bool OrderSelect(int index, int select, void pool)</pre> 
 <p>本函数选择一个订单，等待做进一步地处理。如果函数成功，返回TRUE，如果函数失败，返回FALSE。想要获得详细错误信息，请调用GetLastError()函数。</p> 
 <p>如果通过订单编号选定定单，pool参数应忽略。此订单编号是其唯一识别符。找出所选订单的列表，对订单时间进行分析。如果订单时间为零，此订单就是开单或挂单，或从终端开仓部位列表中选出。我们可以从订单类型区别开单和挂单。如果订单的平仓时间不等于0，此订单就是一个已经平仓的订单，或是一个已删除的挂单，也可能是从终端历史中被选出来的，他们同样可以根据定单类型相互区别。 </p> 
 <p>参数:</p> 
 <pre>index  - 定单索引或订单号，这取决于第2个参数
select - 选定模式。可以为以下的任意值:
         SELECT_BY_POS - 按订单表中索引
          SELECT_BY_TICKET - 按订单号
pool   - 可选择定单索引。当选择SELECT_BY_POS参数时使用。可以为以下的任意值:
         MODE_TRADES (默认)- 来自交易的定单(开单和挂单)，
          MODE_HISTORY - 来自历史的定单(已平仓或取消的订单)。 </pre> 
 <p>示例:</p> 
 <pre class="brush: mql4; toolbar: false;">  if(OrderSelect(12470, SELECT_BY_TICKET)==true)
    {
     Print("定单 #12470 开价格", OrderOpenPrice());
     Print("定单 #12470 收盘价格 ", OrderClosePrice());
    }
  else
    Print("OrderSelect 返回的错误 ",GetLastError());</pre> 
 <div class="divider top-of-page">
  <a title="Top of Page" href="#top">Back to Top</a>
 </div> 
 <h2><a name="OrderClose"></a>OrderClose() – 平仓</h2> 
 <pre class="brush: mql4; toolbar: false;">bool OrderClose(int ticket, double lots,
                double price, int slippage, void Color)</pre> 
 <p>定单平仓。如果函数执行成功，返回TRUE。如果函数执行失败，返回FALSE。想要获得详细错误信息，请调用GetLastError()函数。 </p> 
 <p>参数:</p> 
 <pre>ticket   - 订单号。
lots     - 平仓手数。
price    - 平仓价格。
slippage - 最高滑点数。
Color    - 图表中平仓箭头颜色。如果参数丢失或用CLR_NONE值，将不会在图表中画出。 </pre> 
 <p>示例:</p> 
 <pre class="brush: mql4; toolbar: false;">  if(iRSI(NULL,0,14,PRICE_CLOSE,0)&gt;75)
    {
     OrderClose(order_id,1,Ask,3,Red);
     return(0);
    }</pre> 
 <div class="divider top-of-page">
  <a title="Top of Page" href="#top">Back to Top</a>
 </div> 
 <h2><a name="OrderCloseBy"></a>OrderCloseBy() – 相反头寸平仓</h2> 
 <pre class="brush: mql4; toolbar: false;">bool OrderCloseBy(int ticket, int opposite, void Color)</pre> 
 <p>用相反定单对打开仓位进行平仓操作。如果函数成功，返回TRUE。如果函数失败，返回FALSE。获得详细错误信息，请查看GetLastError()函数。 </p> 
 <p>参数:</p> 
 <pre>ticket   - 订单号。
opposite - 相反订单的订单号。
Color    - 图表中平仓箭头颜色。如果参数丢失或用CLR_NONE值，将不会在图表中画出。 </pre> 
 <p>示例:</p> 
 <pre class="brush: mql4; toolbar: false;">  if(iRSI(NULL,0,14,PRICE_CLOSE,0)&gt;75)
    {
     OrderCloseBy(order_id,opposite_id);
     return(0);
    }</pre> 
 <div class="divider top-of-page">
  <a title="Top of Page" href="#top">Back to Top</a>
 </div> 
 <h2><a name="OrderClosePrice"></a>OrderClosePrice() – 获取订单平仓价格</h2> 
 <pre class="brush: mql4; toolbar: false;">double OrderClosePrice()</pre> 
 <p>获取订单平仓价格。对于已经平仓的订单返回平仓时价格，对于未平仓订单返回该订单货币对的实时价格。</p> 
 <p>注：定单必须用 <a href="#OrderSelect">OrderSelect()</a> 函数提前选定。 </p> 
 <p>示例:</p> 
 <pre class="brush: mql4; toolbar: false;">  if(OrderSelect(ticket,SELECT_BY_POS)==true)
    Print("对于订单的收盘价格",OrderClosePrice());
  else
    Print("OrderSelect 失败错误代码是",GetLastError());</pre> 
 <div class="divider top-of-page">
  <a title="Top of Page" href="#top">Back to Top</a>
 </div> 
 <h2><a name="OrderCloseTime"></a>OrderCloseTime() – 获取订单平仓时间</h2> 
 <pre class="brush: mql4; toolbar: false;">datetime OrderCloseTime()</pre> 
 <p>返回当前订单的平仓时间。如果定单的平仓时间不是0，所选订单会从账户历史重新尝试。未平仓的订单和挂单交易的平仓时间等于0。</p> 
 <p>注：定单必须用 <a href="#OrderSelect">OrderSelect()</a> 函数提前选定。 </p> 
 <p>示例:</p> 
 <pre class="brush: mql4; toolbar: false;">  if(OrderSelect(10,SELECT_BY_POS,MODE_HISTORY)==true)
    {
     datetime ctm=OrderOpenTime();
     if(ctm&gt;0) Print("定单10 开仓时间", ctm);
     ctm=OrderCloseTime();
     if(ctm&gt;0) Print("定单 10 平仓时间", ctm);
    }
  else
    Print("OrderSelect失败错误代码是",GetLastError());</pre> 
 <div class="divider top-of-page">
  <a title="Top of Page" href="#top">Back to Top</a>
 </div> 
 <h2><a name="OrderComment"></a>OrderComment() – 获取订单注释</h2> 
 <pre class="brush: mql4; toolbar: false;">string OrderComment()</pre> 
 <p>返回当前订单的注释。</p> 
 <p>注：定单必须用 <a href="#OrderSelect">OrderSelect()</a> 函数提前选定。 </p> 
 <p>示例:</p> 
 <pre class="brush: mql4; toolbar: false;">  string comment;
  if(OrderSelect(10,SELECT_BY_TICKET)==false)
    { Print("OrderSelect 失败错误代码是",GetLastError());
     return(0);
    }
  comment = OrderComment();
  // ...</pre> 
 <div class="divider top-of-page">
  <a title="Top of Page" href="#top">Back to Top</a>
 </div> 
 <h2><a name="OrderCommission"></a>OrderCommission() – 获取订单佣金数额</h2> 
 <pre class="brush: mql4; toolbar: false;">double OrderCommission()</pre> 
 <p>返回当前订单的佣金数额。</p> 
 <p>注：定单必须用 <a href="#OrderSelect">OrderSelect()</a> 函数提前选定。 </p> 
 <p>示例:</p> 
 <pre class="brush: mql4; toolbar: false;">  if(OrderSelect(10,SELECT_BY_POS)==true)
    Print("定单10 "佣金,OrderCommission());
  else
   Print("OrderSelect 失败错误代码是",GetLastError());</pre> 
 <div class="divider top-of-page">
  <a title="Top of Page" href="#top">Back to Top</a>
 </div> 
 <h2><a name="OrderDelete"></a>OrderDelete() – 删除挂单</h2> 
 <pre class="brush: mql4; toolbar: false;">bool OrderDelete(int ticket, void Color)</pre> 
 <p>删除指定订单的挂单。如果函数成功，返回TRUE。如果函数失败，返回FALSE。获得详细错误信息，请查看GetLastError()函数。 </p> 
 <p>参数:</p> 
 <pre>ticket   - 要删除的订单(挂单)号。
Color    - 图表中平仓箭头颜色。如果参数丢失或用CLR_NONE值，将不会在图表中画出。 </pre> 
 <p>示例:</p> 
 <pre class="brush: mql4; toolbar: false;">  if(Ask&gt;var1)
    {
     OrderDelete(order_ticket);
     return(0);
    }</pre> 
 <div class="divider top-of-page">
  <a title="Top of Page" href="#top">Back to Top</a>
 </div> 
 <h2><a name="OrderExpiration"></a>OrderExpiration() – 获取挂单有效时间</h2> 
 <pre class="brush: mql4; toolbar: false;">datetime OrderExpiration()</pre> 
 <p>返回当前挂单的有效时间。</p> 
 <p>注：定单必须用 <a href="#OrderSelect">OrderSelect()</a> 函数提前选定。 </p> 
 <p>示例:</p> 
 <pre class="brush: mql4; toolbar: false;">  if(OrderSelect(10, SELECT_BY_TICKET)==true)
    Print("定单 #10 有效日期为",OrderExpiration());
  else
    Print("OrderSelect 返回的",GetLastError()错误);</pre> 
 <div class="divider top-of-page">
  <a title="Top of Page" href="#top">Back to Top</a>
 </div> 
 <h2><a name="OrderLots"></a>OrderLots() – 获取订单交易手数</h2> 
 <pre class="brush: mql4; toolbar: false;">double OrderLots()</pre> 
 <p>返回当前订单的交易手数。</p> 
 <p>注：定单必须用 <a href="#OrderSelect">OrderSelect()</a> 函数提前选定。 </p> 
 <p>示例:</p> 
 <pre class="brush: mql4; toolbar: false;">  if(OrderSelect(10,SELECT_BY_POS)==true)
    Print("定单 10 交易手数",OrderLots());
  else
    Print("OrderSelect 返回的 ",GetLastError()错误);</pre> 
 <div class="divider top-of-page">
  <a title="Top of Page" href="#top">Back to Top</a>
 </div> 
 <h2><a name="OrderMagicNumber"></a>OrderMagicNumber() – 获取订单魔术编号</h2> 
 <pre class="brush: mql4; toolbar: false;">int OrderMagicNumber()</pre> 
 <p>返回当前订单的魔术编号。</p> 
 <p>注：定单必须用 <a href="#OrderSelect">OrderSelect()</a> 函数提前选定。 </p> 
 <p>示例:</p> 
 <pre class="brush: mql4; toolbar: false;">  if(OrderSelect(10,SELECT_BY_POS)==true)
    Print("定单 10 的魔术编号", OrderMagicNumber());
  else
    Print("OrderSelect 返回的 ",GetLastError()错误);</pre> 
 <div class="divider top-of-page">
  <a title="Top of Page" href="#top">Back to Top</a>
 </div> 
 <h2><a name="OrderModify"></a>OrderModify() – 修改订单</h2> 
 <pre class="brush: mql4; toolbar: false;">bool OrderModify(int ticket, double price, double stoploss,
                 double takeprofit, datetime expiration,
                 void arrow_color)</pre> 
 <p>修改以前的开仓或挂单的订单参数。如果函数成功，返回TRUE。如果函数失败，返回FALSE。如果想获取详细的错误信息，请调用GetLastError()函数。</p> 
 <p>注：只有挂单才能修改开仓价和过期时间。</p> 
 <p>如果用原值作为参数传递给该函数，将会产生错误代码为1的信息 (ERR_NO_RESULT)。</p> 
 <p>在某些交易服务器上，挂单的过期时间被禁用。这种情况下，当在过期参数中指定一个非零值时，将生成147错误(ERR_TRADE_EXPIRATION_DENIED)。 </p> 
 <p>参数:</p> 
 <pre>ticket     - 要修改的订单(挂单)号。
price      -  新的开仓价格。（对于挂单有效）
stoploss   -   新止损价位。
takeprofit -   新止盈价位。
expiration -   挂单有效时间。（对于挂单有效）
Color      - 图表中平仓箭头颜色。如果参数丢失或用CLR_NONE值，将不会在图表中画出。 </pre> 
 <p>示例:</p> 
 <pre class="brush: mql4; toolbar: false;">  if(TrailingStop&gt;0)
    {
     OrderSelect(12345,SELECT_BY_TICKET);
     if(Bid-OrderOpenPrice()&gt;Point*TrailingStop)
       {
        if(OrderStopLoss()&lt;Bid-Point*TrailingStop)
          {
           OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Blue);
           return(0);
          }
       }
    }</pre> 
 <div class="divider top-of-page">
  <a title="Top of Page" href="#top">Back to Top</a>
 </div> 本文地址：
 <a href="412.html" rel="bookmark"><b>412.html</b></a> 
</div>
</body>
</html>